package com.xgq.drink.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xgq.drink.entity.ChatGroupMember;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 聊天群组成员Mapper接口
 */
public interface ChatGroupMemberMapper extends BaseMapper<ChatGroupMember> {
    
    /**
     * 获取群组所有成员
     * @param groupId 群组ID
     * @return 成员列表
     */
    @Select("SELECT * FROM chat_group_member WHERE group_id = #{groupId} AND status = 1")
    List<ChatGroupMember> getGroupMembers(@Param("groupId") Long groupId);
    
    /**
     * 获取用户在群组中的角色
     * @param groupId 群组ID
     * @param userId 用户ID
     * @return 用户角色
     */
    @Select("SELECT role FROM chat_group_member WHERE group_id = #{groupId} " +
            "AND user_id = #{userId} AND status = 1")
    Integer getMemberRole(@Param("groupId") String groupId, @Param("userId") String userId);
    
    /**
     * 更新群组成员状态
     * @param id 成员记录ID
     * @param status 状态值
     * @return 更新结果
     */
    @Update("UPDATE chat_group_member SET status = #{status}, update_time = NOW() " +
            "WHERE id = #{id}")
    int updateMemberStatus(@Param("id") Long id, @Param("status") Integer status);
    
    /**
     * 更新群组成员角色
     * @param groupId 群组ID
     * @param userId 用户ID
     * @param role 角色值
     * @return 更新结果
     */
    @Update("UPDATE chat_group_member SET role = #{role}, update_time = NOW() " +
            "WHERE group_id = #{groupId} AND user_id = #{userId}")
    int updateMemberRole(@Param("groupId") String groupId,
                         @Param("userId") String userId,
                         @Param("role") Integer role);
    
    /**
     * 检查用户是否是群组成员
     * @param groupId 群组ID
     * @param userId 用户ID
     * @return 记录数
     */
    @Select("SELECT COUNT(*) FROM chat_group_member WHERE group_id = #{groupId} " +
            "AND user_id = #{userId} AND status = 1")
    int checkIsMember(@Param("groupId") String groupId, @Param("userId") String userId);
} 